package com.test.test.utils.aspect;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/*@Aspect
@Component*/
/**
 * 匹配对象 三种方式 this target bean
 * 
 * @author zx
 *
 */
public class ObjectAspect {

	/**
	 * //匹配AOP对象的目标对象为指定类型的方法,即LogService的aop代理对象的方法 @Pointcut(
	 * "this(com.imooc.log.Loggable)")
	 * //匹配实现Loggable接口的目标对象(而不是aop代理后的对象)的方法 @Pointcut(
	 * "target(com.imooc.log.Loggable)") //this 可以拦截
	 * DeclareParents(Introduction) //target 不拦截 DeclareParents(Introduction)
	 * //匹配所有以Service结尾的bean里头的方法 @Pointcut("bean(*Service)") Created by cat on
	 * 2016-12-04.
	 */
	// 可以拦截到动态的方法
	@Pointcut("this(com.test.test.service.UserService)")
	public void thisDemo() {

	}

	// 不能拦截动态添加的方法
	@Pointcut("target(com.test.test.service.UserService)")
	public void targetDemo() {

	}

	// 拦截 注入bean中 以 service 结尾的类
	@Pointcut("bean(*Service)")
	public void beanDemo() {

	}

	@Before("beanDemo()")
	public void before() {
		System.err.println("拦截对象");
	}

}
